/*****************************
 *@file: CharacterEntityItem
 *@author: 陈吕唐
 *@desc: 显示角色视图
 *@date: 2024-03-22	19:22
 *****************************/
import { Label, _decorator } from 'cc';
import CharacterEntity from '../../character/CharacterEntity';
import SkillVO from '../../pojo/vo/SkillVO';
import { CharacterPOItem } from './CharacterPOItem';
import { SkillVOItem } from './SkillVOItem';
const { ccclass, property } = _decorator;

@ccclass('CharacterEntityItem')
export class CharacterEntityItem extends CharacterPOItem {
    /****************************************************************************************************************
     *Readonly 常量
     ****************************************************************************************************************/
    /****************************************************************************************************************
     *Property 定义变量
     ****************************************************************************************************************/
    protected _value: CharacterEntity = undefined!;
    /***************************************************************
     *PropertyUI 引用的控件
     ***************************************************************/
    @property({ group: { name: 'Entity', id: '2' }, type: Label, tooltip: `攻击文本组件` })
    private ackLabel: Label = undefined!;

    @property({ group: { name: 'Entity', id: '2' }, type: Label, tooltip: `防御文本组件` })
    private defLabel: Label = undefined!;

    @property({ group: { name: 'Entity', id: '2' }, type: Label, tooltip: `生命值文本组件` })
    private hpLabel: Label = undefined!;

    @property({ group: { name: 'Entity', id: '2' }, type: Label, tooltip: `速度文本组件` })
    private spdLabel: Label = undefined!;

    @property({ group: { name: 'Entity', id: '2' }, type: [SkillVOItem], tooltip: `显示英雄技能` })
    private skillItems: SkillVOItem[] = [];
    /****************************************************************************************************************
     * Lifecycle 生命周期相关方法
     ****************************************************************************************************************/
    protected onEnable(): void {
        this.updateView(this.value);
    }
    /****************************************************************************************************************
     * Public 公有方法
     ****************************************************************************************************************/
    /****************************************************************************************************************
     * private 私有方法
     ****************************************************************************************************************/
    protected updateView(value: CharacterEntity = this.value) {
        super.updateView(value);
        if (!value) { return; }
        if (!this.enabledInHierarchy) { return; }

        if (this.ackLabel) {
            this.ackLabel.string = value.atk.toFixed();
        }
        if (this.defLabel) {
            this.defLabel.string = value.def.toFixed();
        }
        if (this.hpLabel) {
            this.hpLabel.string = value.hp.toFixed();
        }
        if (this.spdLabel) {
            this.spdLabel.string = value.spd.toFixed();
        }

        let items: SkillVOItem[] = this.skillItems;
        let skills: SkillVO[] = value.skills;

        for (let i = 0; i < items.length; i++) {
            const item = items[i];
            if (!item) {
                continue;
            }

            if (i >= skills.length) {
                item.node.active = false;
                continue;
            }

            item.node.active = true;

            let skill = skills[i];
            item.value = skill;
        }

    }
    /****************************************************************************************************************
     * Property Get && Set 属性的 get && set 函数
     ****************************************************************************************************************/
    public get value(): CharacterEntity {
        return this._value;
    }
    public set value(value: CharacterEntity) {
        this._value = value;
        this.updateView(value);
    }
}


